"""
三种使用方式详细对比说明
简单使用 vs 高级使用 vs 自定义图表
"""

from stock_chart_app import StockChartApp, create_stock_chart_app, run_stock_chart
from .config import config, flags

def demonstrate_simple_usage():
    """
    1. 简单使用方式
    ================
    
    特点：
    - 代码最少，只需要1行代码
    - 使用默认配置，开箱即用
    - 适合快速查看股票数据
    - 无法自定义任何设置
    
    使用场景：
    - 快速查看单只股票
    - 初学者使用
    - 临时查看数据
    """
    print("=" * 50)
    print("1. 简单使用方式")
    print("=" * 50)
    
    # 只需要一行代码！
    file_path = "F:\\股票数据\\daily20250829\\daily\\000554.SZ.csv"
    run_stock_chart(file_path, "简单使用示例")
    
    # 优点：
    # - 代码最少
    # - 开箱即用
    # - 适合快速查看
    
    # 缺点：
    # - 无法自定义
    # - 无法获取数据
    # - 无法修改图表设置


def demonstrate_advanced_usage():
    """
    2. 高级使用方式
    ================
    
    特点：
    - 手动管理应用程序生命周期
    - 可以获取各个组件进行操作
    - 可以访问原始数据
    - 需要手动清理资源
    
    使用场景：
    - 需要访问数据进行分析
    - 需要在运行前进行预处理
    - 需要获取图表组件进行后续操作
    
    优势：
    - 完全控制应用程序流程
    - 可以获取所有组件和数据
    - 适合复杂应用场景
    """
    print("=" * 50)
    print("2. 高级使用方式")
    print("=" * 50)
    
    # 创建应用程序实例
    app = StockChartApp("高级使用示例")
    
    try:
        # 手动初始化
        app.initialize_app()
        
        # 加载数据
        file_path = "F:\\股票数据\\daily20250829\\daily\\000554.SZ.csv"
        app.load_data(file_path)
        
        # 可以获取各个组件进行操作
        data_loader = app.get_data_loader()
        kline_chart = app.get_kline_chart()
        volume_chart = app.get_volume_chart()
        
        # 可以访问原始数据
        data = data_loader.get_data()
        print(f"数据加载完成，共 {len(data)} 条记录")
        
        # 可以获取价格范围
        min_price, max_price = data_loader.get_price_range()
        print(f"价格范围: {min_price:.2f} - {max_price:.2f}")
        
        # 可以获取成交量范围
        min_volume, max_volume = data_loader.get_volume_range()
        print(f"成交量范围: {min_volume:,} - {max_volume:,}")
        
        # 手动运行
        app.run()
        
    finally:
        # 必须手动清理资源
        app.cleanup()
    
    # 优点：
    # - 完全控制流程
    # - 可以访问所有数据
    # - 可以进行预处理
    # - 适合复杂场景
    
    # 缺点：
    # - 代码较多
    # - 需要手动管理资源


def demonstrate_custom_charts():
    """
    3. 自定义图表
    ==============
    
    特点：
    - 使用便捷函数创建应用程序
    - 创建后可以自定义图表设置
    - 平衡了简单性和灵活性
    - 适合需要自定义但不需要复杂控制的场景
    
    使用场景：
    - 需要调整图表显示效果
    - 需要修改价格或成交量范围
    - 需要自定义图表样式
    - 不需要复杂的数据处理
    
    优势：
    - 代码相对简洁
    # - 可以自定义图表设置
    # - 自动管理资源清理
    """
    print("=" * 50)
    print("3. 自定义图表")
    print("=" * 50)
    
    # 使用便捷函数创建应用程序
    file_path = "F:\\股票数据\\daily20250829\\daily\\000554.SZ.csv"
    app = create_stock_chart_app(file_path, "自定义图表示例")
    
    try:
        # 获取图表组件进行自定义
        kline_chart = app.get_kline_chart()
        volume_chart = app.get_volume_chart()
        data_loader = app.get_data_loader()
        
        # 自定义K线图设置
        min_price, max_price = data_loader.get_price_range()
        print(f"原始价格范围: {min_price:.2f} - {max_price:.2f}")
        
        # 增加K线图的上下边距
        kline_chart.set_price_range(min_price, max_price, padding=config.PRICE_PADDING)  # 20%边距
        print("已设置K线图边距为20%")
        
        # 自定义成交量图设置
        min_volume, max_volume = data_loader.get_volume_range()
        print(f"原始成交量范围: {min_volume:,} - {max_volume:,}")
        
        # 压缩成交量图的显示范围
        volume_chart.set_volume_range(
            min_volume, 
            max_volume, 
            compression_factor=config.VOLUME_SCALE_FACTOR  # 压缩到30%
        )
        print("已设置成交量图压缩为30%")
        
        # 还可以自定义其他设置...
        # kline_chart.set_x_range(0, 100)  # 只显示前100个数据点
        # volume_chart.scale_volume_to_price(max_volume, max_price, scale_factor=500)
        
        print("图表自定义完成，启动应用程序...")
        
        # 运行应用程序
        app.run()
        
    finally:
        app.cleanup()
    
    # 优点：
    # - 代码相对简洁
    # - 可以自定义图表设置
    # - 自动管理资源
    # - 适合大多数使用场景
    
    # 缺点：
    # - 无法进行复杂的数据预处理
    # - 自定义选项有限


def comparison_summary():
    """三种方式的对比总结"""
    print("=" * 60)
    print("三种使用方式对比总结")
    print("=" * 60)
    
    comparison = [
        ["特性", "简单使用", "高级使用", "自定义图表"],
        ["代码行数", "1行", "15-20行", "8-12行"],
        ["控制程度", "最低", "最高", "中等"],
        ["自定义能力", "无", "完全", "有限"],
        ["数据访问", "无", "完全", "有限"],
        ["资源管理", "自动", "手动", "自动"],
        ["适用场景", "快速查看", "复杂应用", "一般使用"],
        ["学习成本", "最低", "最高", "中等"],
        ["灵活性", "最低", "最高", "中等"],
        ["推荐指数", "⭐⭐⭐", "⭐⭐⭐⭐⭐", "⭐⭐⭐⭐"]
    ]
    
    # 打印对比表格
    for i, row in enumerate(comparison):
        if i == 0:
            print(f"{row[0]:<12} | {row[1]:<12} | {row[2]:<12} | {row[3]:<12}")
            print("-" * 60)
        else:
            print(f"{row[0]:<12} | {row[1]:<12} | {row[2]:<12} | {row[3]:<12}")
    
    print("\n" + "=" * 60)
    print("使用建议：")
    print("=" * 60)
    print("• 快速查看股票 → 使用【简单使用】")
    print("• 需要数据分析 → 使用【高级使用】")
    print("• 调整图表显示 → 使用【自定义图表】")
    print("• 复杂应用开发 → 使用【高级使用】")
    print("• 一般日常使用 → 使用【自定义图表】")


def main():
    """主函数 - 选择要演示的方式"""
    print("股票K线图三种使用方式演示")
    print("=" * 60)
    
    examples = {
        "1": ("简单使用", demonstrate_simple_usage),
        "2": ("高级使用", demonstrate_advanced_usage), 
        "3": ("自定义图表", demonstrate_custom_charts),
        "4": ("对比总结", comparison_summary)
    }
    
    print("请选择要演示的方式:")
    for key, (name, _) in examples.items():
        print(f"{key}. {name}")
    
    choice = input("请输入选择 (1-4): ").strip()
    
    if choice in examples:
        try:
            examples[choice][1]()
        except KeyboardInterrupt:
            print("\n程序被用户中断")
        except Exception as e:
            print(f"运行示例时出错: {e}")
            import traceback
            traceback.print_exc()
    else:
        print("无效选择")


if __name__ == "__main__":
    main()
